package com.itheima;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;

public class CodeGenerator {
    public static void main(String[] args) {
        AutoGenerator autoGenerator =new AutoGenerator();


        DataSourceConfig dataSource = new DataSourceConfig();
        dataSource.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
        dataSource.setUsername("root");
        dataSource.setPassword("dzl123");

        autoGenerator.setDataSource(dataSource);

        //TODO 设置全局变量
        GlobalConfig globalConfig =new GlobalConfig();
        globalConfig.setOutputDir("C:\\Users\\DZL\\IdeaProjects\\mybatisplus/mybatispuls_04_generator/src/main/java");//设置代码生成位置
        globalConfig.setOpen(false);//设置生成后是否打开目录
        globalConfig.setFileOverride(true);//设置是否覆盖原始的生成文件
        globalConfig.setAuthor("邓长龙");//设置作者
        globalConfig.setMapperName("%sDao");//设置数据层接口名，%s为占位符，代指模块名
        globalConfig.setIdType(IdType.ASSIGN_ID);//设置id生成策略
        autoGenerator.setGlobalConfig(globalConfig);

        //TODO 设置包名相关配置
        PackageConfig packageConfig =new PackageConfig();
        packageConfig.setParent("com.aaa");//设置生成的包，与代码所在的位置不冲突，二者组合叠加为完整路径
        packageConfig.setEntity("domain");//设置实体类包名
        packageConfig.setMapper("dao");//设置数据层包名
        autoGenerator.setPackageInfo(packageConfig);

        //TODO 策略配置
        StrategyConfig strategyConfig =new StrategyConfig();
//        strategyConfig.setInclude("tb_user");//设置当前参与生成的表名，参数可变
        strategyConfig.setTablePrefix("tb_");//设置数据库的前缀名称，模块名 = 数据库名 - 前缀名
        strategyConfig.setRestControllerStyle(true);//设置是否启用Rest风格
        strategyConfig.setVersionFieldName("version");//设置乐观锁字段名
        strategyConfig.setLogicDeleteFieldName("deleted");//设置逻辑删除字段名
        strategyConfig.setEntityLombokModel(true);//设置是否启用lombok
        autoGenerator.setStrategy(strategyConfig);

        //执行生成操作
        autoGenerator.execute();

    }
}
